import observer from './observer'//观察数据劫持
//这些都是能够改变原数组的方法
const arrFun: Array<string> = ['push', 'pop', 'shift', 'unshift', 'sort', 'reverse,', 'splice']

//创建一个有Array原型的对象，用来重写能够改变原数组的方法
const arrayPrototype: Object = Object.create(Array.prototype);

//重写数组方法
function arrayObserver() {
    arrFun.forEach(function (key) {
        arrayPrototype[key] = function (...arr: Array<any>) {
            Array.prototype[key].apply(this, arr);
            let newArr: Array<any> = [];
            //添加方法，添加的元素可能是对象或者数组，还要对它进行观察
            switch (key) {
                case 'push':
                    newArr = arr;
                    break;
                case 'unshift':
                    newArr = arr;
                    break;
                case 'splice':
                    newArr = arr.slice(2);
            }
            if (newArr.length !== 0) {
                observer(newArr);
            }
        }
    })
}
arrayObserver();

export {
    arrayPrototype
}